Home | History | Annotate | Download | only in include
      1 /**************************************************************************\
      2 *
      3 * Copyright (c) 1998-2000, Microsoft Corp.  All Rights Reserved.
      4 *
      5 * Module Name:
      6 *
      7 *   GdiplusFont.h
      8 *
      9 * Abstract:
     10 *
     11 *   Font related declarations
     12 *
     13 \**************************************************************************/
     14 
     15 #ifndef _GDIPLUSFONT_H
     16 #define _GDIPLUSFONT_H
     17 
     18 inline
     19 Font::Font(IN HDC hdc)
     20 {
     21     GpFont *font = NULL;
     22     lastResult = DllExports::GdipCreateFontFromDC(hdc, &font);
     23 
     24 #ifndef DCR_USE_NEW_135429
     25     if ((INT) lastResult >= 10)
     26         lastResult = NotFound;
     27 #endif
     28 
     29     SetNativeFont(font);
     30 }
     31 
     32 #ifdef DCR_USE_NEW_127084
     33 inline
     34 Font::Font(IN HDC hdc,
     35            IN const HFONT hfont)
     36 {
     37     GpFont *font = NULL;
     38 
     39     if (hfont)
     40     {
     41         LOGFONTA lf;
     42 
     43         if(GetObjectA(hfont, sizeof(LOGFONTA), &lf))
     44             lastResult = DllExports::GdipCreateFontFromLogfontA(hdc, &lf, &font);
     45         else
     46             lastResult = DllExports::GdipCreateFontFromDC(hdc, &font);
     47     }
     48     else
     49     {
     50         lastResult = DllExports::GdipCreateFontFromDC(hdc, &font);
     51     }
     52 
     53 #ifndef DCR_USE_NEW_135429
     54     if ((INT) lastResult >= 10)
     55         lastResult = NotFound;
     56 #endif
     57 
     58     SetNativeFont(font);
     59 }
     60 #endif
     61 
     62 inline
     63 Font::Font(IN HDC hdc,
     64            IN const LOGFONTW* logfont)
     65 {
     66     GpFont *font = NULL;
     67     if (logfont)
     68     {
     69         lastResult = DllExports::GdipCreateFontFromLogfontW(hdc, logfont, &font);
     70     }
     71     else
     72     {
     73         lastResult = DllExports::GdipCreateFontFromDC(hdc, &font);
     74     }
     75 
     76 #ifndef DCR_USE_NEW_135429
     77     if ((INT) lastResult >= 10)
     78         lastResult = NotFound;
     79 #endif
     80 
     81     SetNativeFont(font);
     82 }
     83 
     84 inline
     85 Font::Font(IN HDC hdc,
     86            IN const LOGFONTA* logfont)
     87 {
     88     GpFont *font = NULL;
     89 
     90     if (logfont)
     91     {
     92         lastResult = DllExports::GdipCreateFontFromLogfontA(hdc, logfont, &font);
     93     }
     94     else
     95     {
     96         lastResult = DllExports::GdipCreateFontFromDC(hdc, &font);
     97     }
     98 
     99 #ifndef DCR_USE_NEW_135429
    100     if ((INT) lastResult >= 10)
    101         lastResult = NotFound;
    102 #endif
    103 
    104     SetNativeFont(font);
    105 }
    106 
    107 inline
    108 Font::Font(
    109      IN const FontFamily * family,
    110      IN REAL         emSize,
    111      IN INT          style,
    112      IN Unit         unit
    113 )
    114 {
    115     GpFont *font = NULL;
    116 
    117     lastResult = DllExports::GdipCreateFont(family ? family->nativeFamily : NULL,
    118                     emSize,
    119                     style,
    120                     unit,
    121                     &font);
    122 
    123 #ifndef DCR_USE_NEW_135429
    124     if ((INT) lastResult >= 10)
    125         lastResult = NotFound;
    126 #endif
    127 
    128     SetNativeFont(font);
    129 }
    130 
    131 inline
    132 Font::Font(
    133      IN const WCHAR *          familyName,
    134      IN REAL                   emSize,
    135      IN INT                    style,
    136      IN Unit                   unit,
    137      IN const FontCollection * fontCollection
    138 )
    139 {
    140     FontFamily family(familyName, fontCollection);
    141 
    142     GpFont * font = NULL;
    143 
    144     lastResult = family.GetLastStatus();
    145 
    146     if (lastResult == Ok)
    147     {
    148         lastResult = DllExports::GdipCreateFont(family.nativeFamily,
    149                                 emSize,
    150                                 style,
    151                                 unit,
    152                                 &font);
    153     }
    154 
    155 #ifndef DCR_USE_NEW_135429
    156     if ((INT) lastResult >= 10)
    157         lastResult = NotFound;
    158 #endif
    159 
    160     SetNativeFont(font);
    161 }
    162 
    163 inline Status
    164 Font::GetLogFontA(IN const Graphics *g,
    165                   OUT LOGFONTA *logfontA) const
    166 {
    167     return SetStatus(DllExports::GdipGetLogFontA(nativeFont, g ? g->nativeGraphics : NULL, logfontA));
    168 
    169 }
    170 
    171 inline Status
    172 Font::GetLogFontW(IN const Graphics *g,
    173                   OUT LOGFONTW *logfontW) const
    174 {
    175     return SetStatus(DllExports::GdipGetLogFontW(nativeFont, g ? g->nativeGraphics : NULL, logfontW));
    176 }
    177 
    178 
    179 inline Font*
    180 Font::Clone() const
    181 {
    182     GpFont *cloneFont = NULL;
    183 
    184     SetStatus(DllExports::GdipCloneFont(nativeFont, &cloneFont));
    185 
    186     return new Font(cloneFont, lastResult);
    187 }
    188 
    189 inline
    190 Font::~Font()
    191 {
    192     DllExports::GdipDeleteFont(nativeFont);
    193 }
    194 
    195 // Operations
    196 
    197 inline BOOL
    198 Font::IsAvailable() const
    199 {
    200     return (nativeFont ? TRUE : FALSE);
    201 }
    202 
    203 inline Status
    204 Font::GetFamily(OUT FontFamily *family) const
    205 {
    206     if (family == NULL)
    207     {
    208         return SetStatus(InvalidParameter);
    209     }
    210 
    211     Status status = DllExports::GdipGetFamily(nativeFont, &(family->nativeFamily));
    212     family->SetStatus(status);
    213 
    214     return SetStatus(status);
    215 }
    216 
    217 inline INT
    218 Font::GetStyle() const
    219 {
    220     INT style;
    221 
    222     SetStatus(DllExports::GdipGetFontStyle(nativeFont, &style));
    223 
    224     return style;
    225 }
    226 
    227 inline REAL
    228 Font::GetSize() const
    229 {
    230     REAL size;
    231     SetStatus(DllExports::GdipGetFontSize(nativeFont, &size));
    232     return size;
    233 }
    234 
    235 inline Unit
    236 Font::GetUnit() const
    237 {
    238     Unit unit;
    239     SetStatus(DllExports::GdipGetFontUnit(nativeFont, &unit));
    240     return unit;
    241 }
    242 
    243 inline REAL
    244 Font::GetHeight(IN const Graphics *graphics) const
    245 {
    246     REAL height;
    247     SetStatus(DllExports::GdipGetFontHeight(
    248         nativeFont,
    249         graphics ? graphics->nativeGraphics : NULL,
    250         &height
    251     ));
    252     return height;
    253 }
    254 
    255 
    256 #ifdef DCR_USE_NEW_125467
    257 inline REAL
    258 Font::GetHeight(IN REAL dpi = 0) const
    259 {
    260     REAL height;
    261     SetStatus(DllExports::GdipGetFontHeightGivenDPI(nativeFont, dpi, &height));
    262     return height;
    263 }
    264 #endif
    265 
    266 
    267 // protected method
    268 inline
    269 Font::Font(IN GpFont* font,
    270            IN Status status)
    271 {
    272     lastResult = status;
    273     SetNativeFont(font);
    274 }
    275 
    276 // protected method
    277 inline VOID
    278 Font::SetNativeFont(GpFont *Font)
    279 {
    280     nativeFont = Font;
    281 }
    282 
    283 inline Status
    284 Font::GetLastStatus(void) const
    285 {
    286     return lastResult;
    287 }
    288 
    289 // protected method
    290 inline Status
    291 Font::SetStatus(IN Status status) const
    292 {
    293     if (status != Ok)
    294         return (lastResult = status);
    295     else
    296         return status;
    297 }
    298 
    299 #endif
    300